還是一樣先上圖
終於來到第六點了!!!可喜可賀
看一下文件中產生Message的方法
5.5.2. IV 計算
產出 IV 值前必須要先行取得 Nonce 後才能產生,計算方式是將取得的 Nonce 值
作 SHA256 加密後,再將英文轉換成大寫取字串右邊 16 碼長度
(例:CB6FA68E42B655AB)
//取得 IV 計算方法
function getIV($nonce){
$data = SHA256($nonce);
return substr($data, strlen($data) - 16, 16);
}
//SHA256 後字串轉大寫
function SHA256($data){
return strtoupper(hash('sha256', $data));
}
取得IV的方法比較單純基本上就照著文件的流程下去編寫即可,
來看主角Message的取得
來人先上範例
//$data 為api所需參數的json格式
//$key 就是我們先前提到的hashId
//AES CBC 加密
function EncryptAesCBC($data, $key, $iv) {
$result = '';
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
$encrypt = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
$result = strtoupper(bin2hex($encrypt));
return $result;
}
這邊如果有google怎麼做aes cbc加密,
應該都會看到openssl_encrypt函式的一些使用方式,
但除非你有經驗,或者偷看答案,不然根本找不到下面code的線索
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
因此串接第三方有個秘訣叫做倒果為因,先去看範例或者前人提供的解答,
然後再去了解整個過程,這也是為什麼很多第三方需要提供範例的原因,
這部份先前取得hashId的部份也是同樣的原理。
回到程式,透過範例我們可以取得加密過後的訊息內文,
加上前幾天的Nonce、HashID、Sign這樣我們要發送api所需的參數都已經到齊了,
明天我們整理一下之後就準備call api啦!